package br.com.werp.regras.rh.integracao;

import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.vos.pessoa.PessoaVO;
import br.com.werp.regras.geral.vos.rh.FuncionarioVO;
import br.com.werp.regras.geral.vos.tabelas.Funcionario;

import java.sql.Connection;

import java.util.List;
import java.util.ResourceBundle;


/**
 * @author Sobreira
 * Criado em 08/09/2005
 */
public class FuncionarioDAO extends MasterDAO {
    private static FuncionarioDAO funcionarioDAO;

    private FuncionarioDAO(String banco) throws Exception {
        super(banco);
    }

    public static FuncionarioDAO getFuncionarioDAO() throws Exception {
        if (funcionarioDAO == null) {
            ResourceBundle bundle = ResourceBundle.getBundle(Constantes.CONFIG);
            funcionarioDAO =
                new FuncionarioDAO(bundle.getString(Constantes.BANCO));
        }

        return funcionarioDAO;
    }

    public void atualizarFuncionario(Object key, Funcionario funcionario)
        throws Exception {
        Connection connection = validarTransacao(key);
        atualizarVO(connection, funcionario, new String[] { "func_id" });
    }

    public void inserirFuncionario(Object key, Funcionario funcionario)
        throws Exception {
        Connection connection = validarTransacao(key);
        inserirVO(connection, funcionario);
    }

    public List pesquisarFuncionarios(FuncionarioVO VO)
        throws Exception {
        Connection connection = getConexao();

        try {
            String tabela = "Pessoa, Fisica, Funcionario";
            StringBuffer where = new StringBuffer();
            where.append("pess_id = fisc_pessoa and pess_id = func_id");

            String nome = VO.getPess_nome();

            if (!"".equals(nome) && (nome != null)) {
                where.append(" and pess_nome like " + aspasLike(nome));
            }

            String mat = VO.getFunc_matricula();

            if (!"".equals(mat) && (mat != null)) {
                where.append(" and func_matricula = " + aspas(mat));
            }

            int pess_id  = VO.getPess_id();

            if (pess_id!=0) {
                where.append(" and pess_id = " + pess_id);
            }
            
            return preencheVO(connection, VO, tabela, where.toString(),
                PessoaVO.EXCLUIDAS);
        } finally {
            liberaConeccao(connection);
        }
    }
}
